www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\PeerRegeditListView.cpp
//Download by http://www.NewXing.com // PeerRegeditListView.cpp : implementation file // #include "stdafx.h" #include "PeerYouC.h" #include "PeerRegeditListView.h" #include "PeerRegeditTreeView.h" #include "mainfrm.h" #include "peersocket.h" #include "regeditvaluetextdlg.h" #include "regeditvalueworddlg.h" #include "regeditvaluebinbdlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPeerRegeditListView IMPLEMENT_DYNCREATE(CPeerRegeditListView, CListView) CPeerRegeditListView::CPeerRegeditListView() { } CPeerRegeditListView::~CPeerRegeditListView() { } BEGIN_MESSAGE_MAP(CPeerRegeditListView, CListView) //{{AFX_MSG_MAP(CPeerRegeditListView) ON_WM_CREATE() ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick) ON_COMMAND(ID_REGEDIT_VALUE_ADD_BINB, OnRegeditValueAddBinb) ON_COMMAND(ID_REGEDIT_VALUE_ADD_TEXT, OnRegeditValueAddText) ON_COMMAND(ID_REGEDIT_VALUE_ADD_WORD, OnRegeditValueAddWord) ON_COMMAND(ID_REGEDIT_VALUE_DEL, OnRegeditValueDel) ON_COMMAND(ID_REGEDIT_VALUE_EDIT, OnRegeditValueEdit) ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPeerRegeditListView drawing void CPeerRegeditListView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here } ///////////////////////////////////////////////////////////////////////////// // CPeerRegeditListView diagnostics #ifdef _DEBUG void CPeerRegeditListView::AssertValid() const { CListView::AssertValid(); } void CPeerRegeditListView::Dump(CDumpContext& dc) const { CListView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CPeerRegeditListView message handlers int CPeerRegeditListView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CListView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here CListCtrl &listCtrl=this->GetListCtrl(); listCtrl.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL); if(!m_imagelist.Create( 16,16,ILC_MASK,3,1)) return -1; m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_REGTEXT)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_REGBIN)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_REGERROR)); listCtrl.SetImageList(&m_imagelist,LVSIL_SMALL); ////////////////////////////////////////////////// LVCOLUMN colinfo; memset(&colinfo,0,sizeof(colinfo)); colinfo.mask=LVCF_TEXT|LVCF_WIDTH; colinfo.cx=100; colinfo.cchTextMax=255; colinfo.pszText="名称"; colinfo.iSubItem=0; colinfo.iOrder=0; listCtrl.InsertColumn(0,&colinfo); colinfo.pszText="类型"; colinfo.iSubItem=1; colinfo.iOrder=1; listCtrl.InsertColumn(1,&colinfo); colinfo.pszText="数据"; colinfo.iSubItem=2; colinfo.iOrder=2; listCtrl.InsertColumn(2,&colinfo); return 0; } void CPeerRegeditListView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here *pResult = 0; /////////////////////// CListCtrl& list=GetListCtrl(); CPoint point; ::GetCursorPos(&point); ScreenToClient(&point); UINT flag=LVHT_ONITEM ; CMenu menu; if(list.HitTest(point,&flag)==-1) { list.SetSelectionMark(-1); VERIFY(menu.LoadMenu(IDR_REGEDIT_LIST_ADD)); } else { VERIFY(menu.LoadMenu(IDR_REGEDIT_LIST_EDITDEL)); } ClientToScreen(&point); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); CWnd* pWndPopupOwner = this; while (pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent(); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner); } void CPeerRegeditListView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CListCtrl& list=GetListCtrl(); CPoint point; ::GetCursorPos(&point); ScreenToClient(&point); UINT flag=LVHT_ONITEM ; if(list.HitTest(point,&flag)==-1) return; CPeerRegeditListView::OnRegeditValueEdit(); *pResult = 0; } void CPeerRegeditListView::OnRegeditValueAddText() { // TODO: Add your command handler code here // CSplitterWnd* regsplitterwnd=(CSplitterWnd*)GetParent(); // CPeerRegeditTreeView* treeview=(CPeerRegeditTreeView*)regsplitterwnd->GetPane(0,0); // CPeerRegeditListView* listview=(CPeerRegeditListView*)regsplitterwnd->GetPane(0,1); // CMainFrame* pMainFrm=(CMainFrame*)AfxGetApp()->GetMainWnd(); // pMainFrm->m_pRegList=listview; // pMainFrm->m_pRegTree=treeview; // CTreeCtrl& tree=treeview->GetTreeCtrl(); // CListCtrl& list=GetListCtrl(); // // CRegeditValueTextDlg dlg; // if(dlg.DoModal()==IDOK) // { // HTREEITEM treeselectitem; // if(!(treeselectitem=tree.GetSelectedItem())||treeselectitem==tree.GetRootItem()) // return; // LVFINDINFO lfinfo; // lfinfo.flags=LVFI_STRING; // lfinfo.psz=dlg.m_name; // if(list.FindItem(&lfinfo)>-1) // { // MessageBox("已有此数值项名,请另选","窥视-客户端",MB_ICONSTOP|MB_OK); // return; // } // REGEDIT reg; // MakeRegInfo(tree,treeselectitem,reg); // strcpy(reg.value,dlg.m_name); // strcpy((char*)reg.data,dlg.m_data); // reg.datalen=dlg.m_data.GetLength()+1; // reg.type=REG_SZ; // // SOCKET s; // DWORD ret; // // char mess[512]; // strcpy(mess,"添加数值: \""); // strcat(mess,reg.key); // if(strlen(reg.sunkey)!=0) // { // strcat(mess,"\\"); // strcat(mess,reg.sunkey); // } // strcat(mess,"\\"); // strcat(mess,reg.value); // strcat(mess,"\""); // if(!PeerCreateSocket(&s,PEER_STREAM)) // { // return; // } // WSAEVENT hevent=WSACreateEvent(); // if(PeerConnectSocket(s,ADDRESS,7788)) // { // COMMAND cmd; // memset(&cmd,0,sizeof(cmd)); // cmd.CommandID=PEER_REGEDIT_SETVALUE; // if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)) // { // Message(mess,"失败"); // goto MYERROR ; // } // if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent)) // { // Message(mess,"失败"); // goto MYERROR ; // } // else // { // COMMAND cmd; // if(!PeerRecvDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)||ret!=sizeof(cmd)) // { // Message(mess,"失败"); // goto MYERROR ; // } // int itemcount=list.GetItemCount(); // list.InsertItem(itemcount,dlg.m_name); // list.SetItem(itemcount,1,LVIF_TEXT,"REG_SZ",0,0,0,NULL); // list.SetItem(itemcount,2,LVIF_TEXT,dlg.m_data,0,0,0,NULL); // } // } // // Message(mess,"成功"); // MYERROR: // PeerCloseSocket(s); // WSACloseEvent(hevent); // } Common(0); } void CPeerRegeditListView::OnRegeditValueAddBinb() { // TODO: Add your command handler code here } void CPeerRegeditListView::OnRegeditValueAddWord() { // TODO: Add your command handler code here Common(1); } void CPeerRegeditListView::OnRegeditValueEdit() { // TODO: Add your command handler code here CSplitterWnd* regsplitterwnd=(CSplitterWnd*)GetParent(); CPeerRegeditTreeView* treeview=(CPeerRegeditTreeView*)regsplitterwnd->GetPane(0,0); CPeerRegeditListView* listview=(CPeerRegeditListView*)regsplitterwnd->GetPane(0,1); CMainFrame* pMainFrm=(CMainFrame*)AfxGetApp()->GetMainWnd(); pMainFrm->m_pRegList=listview; pMainFrm->m_pRegTree=treeview; CTreeCtrl& tree=treeview->GetTreeCtrl(); CListCtrl& list=GetListCtrl(); CString name,type,data; type=list.GetItemText(list.GetSelectionMark(),1); HTREEITEM treeselectitem; if(!(treeselectitem=tree.GetSelectedItem())||treeselectitem==tree.GetRootItem()) return; REGEDIT reg; MakeRegInfo(tree,treeselectitem,reg); if(type=="REG_SZ"||type=="REG_MULTI_SZ"||type=="REG_EXPAND_SZ") { CRegeditValueTextDlg dlg; if(dlg.DoModal()==IDOK) { if(dlg.m_name=="(默认)") dlg.m_name=""; strcpy(reg.value,dlg.m_name); strcpy((char*)reg.data,dlg.m_data); data=dlg.m_data; reg.datalen=dlg.m_data.GetLength()+1; if(type=="REG_SZ") reg.type=REG_SZ; if(type=="REG_MULTI_SZ") reg.type=REG_MULTI_SZ; if(type=="REG_EXPAND_SZ") reg.type=REG_EXPAND_SZ; } else return; } if(type=="REG_DWORD_BIG_ENDIAN"||type=="REG_DWORD") { CRegeditValueWORDdlg dlg; if(dlg.DoModal()==IDOK) { strcpy(reg.value,dlg.m_name); DWORD word; sscanf(dlg.m_data,"%u",&word); char showdata[100]; sprintf(showdata,"0x%x(%u)",word,word); data=showdata; memcpy(®.data,&word,sizeof(DWORD)); reg.datalen=sizeof(DWORD); if(type=="REG_DWORD_BIG_ENDIAN") reg.type=REG_DWORD_BIG_ENDIAN; if(type=="REG_DWORD") reg.type=REG_DWORD; } else return; } if(type=="REG_BINARY"||type=="REG_RESOURCE_LIST"|| type=="REG_FULL_RESOURCE_DESCRIPTOR"||type=="REG_LINK") { CRegeditValueBinbDlg dlg; dlg.DoModal(); //////需要添加代码///////// return; } SOCKET s; DWORD ret; char mess[512]; strcpy(mess,"修改数值: \""); strcat(mess,reg.key); if(strlen(reg.sunkey)!=0) { strcat(mess,"\\"); strcat(mess,reg.sunkey); } if(strlen(reg.value)!=0) { strcat(mess,"\\"); strcat(mess,reg.value); strcat(mess,"\""); } if(!PeerCreateSocket(&s,PEER_STREAM)) { return; } WSAEVENT hevent=WSACreateEvent(); if(PeerConnectSocket(s,ADDRESS,7788)) { COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_REGEDIT_SETVALUE; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)) { Message(mess,"失败"); goto MYERROR ; } if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent)) { Message(mess,"失败"); goto MYERROR ; } else { COMMAND cmd; if(!PeerRecvDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)||ret!=sizeof(cmd)) { Message(mess,"失败"); goto MYERROR ; } int itemcount=list.GetSelectionMark(); list.SetItem(itemcount,2,LVIF_TEXT,data,0,0,0,NULL); } } Message(mess,"成功"); MYERROR: PeerCloseSocket(s); WSACloseEvent(hevent); } void CPeerRegeditListView::OnRegeditValueDel() { // TODO: Add your command handler code here if(MessageBox("确定删除吗?","窥视-客户端",MB_ICONWARNING|MB_OKCANCEL)!=1) return; CSplitterWnd* regsplitterwnd=(CSplitterWnd*)GetParent(); CPeerRegeditTreeView* treeview=(CPeerRegeditTreeView*)regsplitterwnd->GetPane(0,0); CPeerRegeditListView* listview=(CPeerRegeditListView*)regsplitterwnd->GetPane(0,1); CTreeCtrl& tree=treeview->GetTreeCtrl(); CListCtrl& list=listview->GetListCtrl(); HTREEITEM treeselectitem; if(!(treeselectitem=tree.GetSelectedItem())||treeselectitem==tree.GetRootItem()) return; int index=list.GetSelectionMark(); if(index<0) return; REGEDIT reg; MakeRegInfo(tree,treeselectitem,reg); strcpy(reg.value,list.GetItemText(index,0)); if(strcmp(reg.value,"(默认)")==0) { MessageBox("不能删除默认项","窥视-客户端",MB_ICONSTOP|MB_OK); return; } SOCKET s; DWORD ret; char mess[512]; strcpy(mess,"删除数值: \""); strcat(mess,reg.key); if(strlen(reg.sunkey)!=0) { strcat(mess,"\\"); strcat(mess,reg.sunkey); } strcat(mess,"\\"); strcat(mess,reg.value); strcat(mess,"\""); if(!PeerCreateSocket(&s,PEER_STREAM)) { return; } WSAEVENT hevent=WSACreateEvent(); if(PeerConnectSocket(s,ADDRESS,7788)) { COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_REGEDIT_DELVALUE; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)) { Message(mess,"失败"); goto MYERROR ; } if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent)) { Message(mess,"失败"); goto MYERROR ; } else { COMMAND cmd; if(!PeerRecvDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)||ret!=sizeof(cmd)) { Message(mess,"失败"); goto MYERROR ; } list.DeleteItem(index); } } Message(mess,"成功"); MYERROR: PeerCloseSocket(s); WSACloseEvent(hevent); } void CPeerRegeditListView::MakeRegInfo(CTreeCtrl& tree,HTREEITEM item,REGEDIT ®) { HTREEITEM parent; char value[512],tmp[512]; value[0]=0;tmp[0]=0; strcpy(value,tree.GetItemText(item)); if(strcmp(value,"HKEY_CLASSES_ROOT")==0|| strcmp(value,"HKEY_CURRENT_USER")==0|| strcmp(value,"HKEY_LOCAL_MACHINE")==0|| strcmp(value,"HKEY_USERS")==0|| strcmp(value,"HKEY_CURRENT_CONFIG")==0) { strcpy(reg.key,value); reg.sunkey[0]=0; return; } parent=item; while((parent=tree.GetParentItem(parent))) { strcpy(tmp,tree.GetItemText(parent)); if(strcmp(tmp,"HKEY_CLASSES_ROOT")==0|| strcmp(tmp,"HKEY_CURRENT_USER")==0|| strcmp(tmp,"HKEY_LOCAL_MACHINE")==0|| strcmp(tmp,"HKEY_USERS")==0|| strcmp(tmp,"HKEY_CURRENT_CONFIG")==0) { strcpy(reg.key,tmp); strcpy(reg.sunkey,value); return; } else { strcat(tmp,"\\"); strcat(tmp,value); strcpy(value,tmp); } } } void CPeerRegeditListView::Common(int dlgtype) { CSplitterWnd* regsplitterwnd=(CSplitterWnd*)GetParent(); CPeerRegeditTreeView* treeview=(CPeerRegeditTreeView*)regsplitterwnd->GetPane(0,0); CPeerRegeditListView* listview=(CPeerRegeditListView*)regsplitterwnd->GetPane(0,1); CMainFrame* pMainFrm=(CMainFrame*)AfxGetApp()->GetMainWnd(); pMainFrm->m_pRegList=listview; pMainFrm->m_pRegTree=treeview; CTreeCtrl& tree=treeview->GetTreeCtrl(); CListCtrl& list=GetListCtrl(); CString type; CString data; // CRegeditValueBinbDlg dlgbin; HTREEITEM treeselectitem; if(!(treeselectitem=tree.GetSelectedItem())||treeselectitem==tree.GetRootItem()) return; CString name; REGEDIT reg; memset(®,0,sizeof(reg)); MakeRegInfo(tree,treeselectitem,reg); if(dlgtype==0) { reg.type=REG_SZ; type="REG_SZ"; CRegeditValueTextDlg dlgtext; if(dlgtext.DoModal()==IDOK) { name=dlgtext.m_name; strcpy(reg.value,dlgtext.m_name); strcpy((char*)reg.data,dlgtext.m_data); data=dlgtext.m_data; reg.datalen=dlgtext.m_data.GetLength()+1; } else return; } if(dlgtype==1) { reg.type=REG_DWORD; type="REG_DWORD"; CRegeditValueWORDdlg dlgword; if(dlgword.DoModal()==IDOK) { name=dlgword.m_name; strcpy(reg.value,dlgword.m_name); DWORD worddata; sscanf(dlgword.m_data,"%u",&worddata); char thisdata[100]; sprintf(thisdata,"0x%x(%u)",worddata,worddata); data=thisdata; memcpy((char*)reg.data,&worddata,sizeof(DWORD)); reg.datalen=sizeof(DWORD); } else return; } // if(dlgtype==2) // { // reg.type=REG_BINARY; // if(dlgbinb.DoModal()==IDOK) // { // strcpy(reg.value,dlgword.m_name); // memcpy((char*)reg.data,&word,sizeof(DWORD)); // reg.datalen=sizeof(DWORD); // } // else // return; // } LVFINDINFO lfinfo; lfinfo.flags=LVFI_STRING; lfinfo.psz=name; if(list.FindItem(&lfinfo)>-1) { MessageBox("已有此数值项名,请另选","窥视-客户端",MB_ICONSTOP|MB_OK); return; } SOCKET s; DWORD ret; char mess[512]; strcpy(mess,"添加数值: \""); strcat(mess,reg.key); if(strlen(reg.sunkey)!=0) { strcat(mess,"\\"); strcat(mess,reg.sunkey); } strcat(mess,"\\"); strcat(mess,reg.value); strcat(mess,"\""); if(!PeerCreateSocket(&s,PEER_STREAM)) { return; } WSAEVENT hevent=WSACreateEvent(); if(PeerConnectSocket(s,ADDRESS,7788)) { COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_REGEDIT_SETVALUE; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)) { Message(mess,"失败"); goto MYERROR ; } if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent)) { Message(mess,"失败"); goto MYERROR ; } else { COMMAND cmd; if(!PeerRecvDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)||ret!=sizeof(cmd)) { Message(mess,"失败"); goto MYERROR ; } int itemcount=list.GetItemCount(); list.InsertItem(itemcount,name); list.SetItem(itemcount,1,LVIF_TEXT,type,0,0,0,NULL); if(dlgtype==0) list.SetItem(itemcount,2,LVIF_TEXT,data,0,0,0,NULL); if(dlgtype==1) { list.SetItem(itemcount,2,LVIF_TEXT,data,0,0,0,NULL); } } } Message(mess,"成功"); MYERROR: PeerCloseSocket(s); WSACloseEvent(hevent); }